import pandas as pd
import openpyxl
from openpyxl.styles import Font
from sklearn.metrics import r2_score
import numpy as np
# 导入线性回归模型
from sklearn.linear_model import LinearRegression

# 定义函数来读取Excel文件并返回前num_rows行数据
def read_excel_head(file_path, sheet_name='Sheet1', num_rows=10):
    """
    读取Excel文件并返回前num_rows行数据。
    """
    # 使用pandas读取Excel文件
    df = pd.read_excel(file_path, sheet_name=sheet_name)
    # 返回前num_rows行数据
    return df.head(num_rows)

new_file_path=r"data.xlsx"
# 读取上传的Excel文件的前10行数据
df_head = read_excel_head(new_file_path)


def calculate_statistics(df):
    """
    计算R方, RMSEP, MSE, 和 RPD。
    假设DataFrame中包含两列，一列是实际值，另一列是预测值。
    """
    # 假设第一列是预测值，第二列是实际值
    predicted= df.iloc[:, 0]
    actual = df.iloc[:, 1]

    # 计算 R^2
    r2 = r2_score(actual, predicted)

    # 计算 MSE
    mse = np.mean((actual - predicted) ** 2)

    # 计算 RMSEP
    rmsep = np.sqrt(mse)

    # 计算 RPD
    rpd = np.std(actual) / np.mean(actual)

    return r2, rmsep, mse, rpd



# 定义一个函数来执行线性回归并返回系数a和b
def linear_regression_coefficients(df):
    # 假设第一列是自变量，第二列是因变量
    X = df.iloc[:, 0].values.reshape(-1, 1)  # 预测值
    y = df.iloc[:, 1].values  # 实际值

    # 创建线性回归模型
    model = LinearRegression()
    # 拟合模型
    model.fit(X, y)
    
    # 获取系数a和b
    a = model.coef_[0]  # 斜率
    b = model.intercept_  # 截距

    return a, b


# 使用提供的函数计算统计量
r2, rmsep, mse, rpd = calculate_statistics(df_head)
# 使用线性回归函数找到系数a和b
a, b = linear_regression_coefficients(df_head)

# 创建一个新的DataFrame来保存整理后的数据
统计数据 = {
    "统计量": ["R^2", "RMSEP", "MSE", "RPD"],
    "值": [r2, rmsep, mse, rpd]
}
# 创建一个新的DataFrame来保存线性回归的系数
线性回归系数 = {
    "系数": ["a", "b"],
    "值": [a, b]
}

print(统计数据,线性回归系数)

